package com.dems.core.util;

import org.springframework.util.Base64Utils;

import java.io.UnsupportedEncodingException;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class TripleDesUtil {
	public static String DESEDE = "DESede";
	
	/**
     * 加密方法
    *
    * @param str 源数据的字符�?
    * @param key 密钥
    * @return
    */
   public static String encryptMode(String str, String key) {
       if (null == str || "".equals(str.trim())) {
           return null;
       }
       try {
           byte[] bytes = encryptMode(str.getBytes("utf-8"), key);
           return Base64Utils.encodeToString(bytes);
       } catch (final Exception e) {
           e.printStackTrace();
       }
       return null;
   }
   
   public static byte[] encryptMode(byte[] src, String key) {
       try {
           final SecretKey deskey = new SecretKeySpec(build3DesKey(key), DESEDE); // 生成密钥
           final Cipher c1 = Cipher.getInstance(DESEDE); // 实例化负责加密/解密的Cipher工具类
           c1.init(Cipher.ENCRYPT_MODE, deskey); // 初始化为加密模式
           return c1.doFinal(src);
       } catch (final Exception e) {

       }
       return null;
   }
   public static byte[] build3DesKey(String keyStr) throws UnsupportedEncodingException {
       final byte[] key = new byte[24]; // 声明一个24位的字节数组，默认里面都是0
       final byte[] temp = keyStr.getBytes("UTF-8"); // 将字符串转成字节数组

		/*
        * 执行数组拷贝 System.arraycopy(源数组，从源数组哪里开始拷贝，目标数组，拷贝多少位)
		 */
       if (key.length > temp.length) {
           // 如果temp不够24位，则拷贝temp数组整个长度的内容到key数组中
           System.arraycopy(temp, 0, key, 0, temp.length);
       } else {
           // 如果temp大于24位，则拷贝temp数组24个长度的内容到key数组中
           System.arraycopy(temp, 0, key, 0, key.length);
       }
       return key;
   }
   
   
}
